package org.javabasic;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @Auther: qingle
 * @Date: 2024/8/23-19:23
 * @Description:
 *
 * @version: 1.0
 */
public class MyClass_45_OuterClass {

	/**
	 * 成员内部类：定义在另一个类的内部，作为外部类的一个成员。成员内部类可以访问外部类的所有成员，包括私有成员。
	 */
	public class OuterClass {
		private final String outerField = "外部字段";

		class InnerClass {
			void printOuterField() {
				System.out.println(outerField);
			}
		}
	}

	/**
	 * 静态内部类：定义在另一个类内部，使用static关键字。
	 * 静态内部类不依赖于外部类的实例，因此不能直接访问外部类的实例成员，但可以访问外部类的静态成员。
	 */
	public static class OuterClass2 {
		private static final String STATIC_FIELD = "静态字段";
		private final String ShiLi_FIELD = "实例成员";

		static class InnerClass {
			void printStaticField() {
				System.out.println(STATIC_FIELD);
//				System.out.println(ShiLi_FIELD);// 无法访问
			}
		}
	}

	/**
	 * 局部内部类：定义在一个方法或一个代码块内部的类。
	 * 局部内部类的作用域仅限于该方法或代码块，它们通常用于实现方法内部的辅助功能。
	 */
	public class OuterClass3 {
		void outerMethod() {
			class LocalInnerClass {
				void doSomething() {
					System.out.println("局部内部类");
				}
			}
			LocalInnerClass lic = new LocalInnerClass();
			lic.doSomething();
		}
	}

	// 匿名内部类：没有名称的内部类，通常用于只需要使用一次的类。
	// 它们经常用于实现事件监听器或快速实现接口。
	Button button = new Button(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("按钮被点击");
		}
	}.toString());

	public static class OuterClass4 {
		enum Color {
			RED, GREEN, BLUE
		}
	}

}